#pragma once

#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<fcntl.h>
#include<signal.h>

void Deamon()
{
    //还需要避免信号的干扰，例如管道的SIGPIPE 
    //可以将之前的信号忽略提到此处
    signal(SIGPIPE,SIG_IGN);
    signal(SIGCHLD, SIG_IGN);
    //创建子进程，让非进程组组长进程调用setsid
    if(fork()) 
    {
        exit(0);//父进程退出，子进程变为孤儿进程
    }

    //将工作路径更改为根目录，是为了在将软件打包的时候，避免有些工作路径会将所有配置文件放在系统的指定路径下
    //而每一个人的安装路径不一样；将工作路径更改为根目录就可以让每一个安装的人以绝对路径的方式
    //让软件自己找到配置文件；
    chdir("/");

    //形成独立会话
    setsid();

    //关闭独立会话的终端，让这个进程不要被终端影响
    //或者将这些终端重定向到 /dev/null 中 ， 重定向使用dup2
    //首先需要打开文件 /dev/null
    int fd = open("/dev/null",O_RDWR);
    if(fd > 0)
    {
        dup2(fd ,0);
        dup2(fd ,1);
        dup2(fd ,2);
    }
}